window: Split out a function
authorBenjamin Otte <otte@redhat.com>
Tue, 9 Apr 2013 10:06:51 +0000 (12:06 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 9 Apr 2013 10:09:12 +0000 (12:09 +0200)
We don't want to remember sizes in the not resizable case. Also a
function named "guess_default_size" should not look at previous sizes,
it should guess.

gtk/gtkwindow.c

index a25ce752d6760a52df629a2eb723153b00a30d07..d92916407a89dae95c8b7f37788f46230528a7b4 100644 (file)
@@ -5558,7 +5558,6 @@ gtk_window_guess_default_size (GtkWindow *window,
                                gint      *width,
                                gint      *height)
 {
-  GtkWindowGeometryInfo *info;
   GtkWidget *widget;
   GdkScreen *screen;
   int minimum, natural;
@@ -5598,11 +5597,21 @@ gtk_window_guess_default_size (GtkWindow *window,
       gtk_widget_get_preferred_height_for_width (widget, *width, &minimum, &natural);
       *height = MAX (minimum, MIN (*height, natural));
     }
+}
+
+static void
+gtk_window_get_remembered_size (GtkWindow *window,
+                                int       *width,
+                                int       *height)
+{
+  GtkWindowGeometryInfo *info;
+
+  *width = 0;
+  *height = 0;
 
   info = gtk_window_get_geometry_info (window, FALSE);
   if (info)
     {
-      g_print ("last geometry info was %d %d\n", info->last.configure_request.width, info->last.configure_request.height);
       /* MAX() works even if the last request is unset with -1 */
       *width = MAX (*width, info->last.configure_request.width);
       *height = MAX (*height, info->last.configure_request.height);
@@ -5674,11 +5683,15 @@ gtk_window_realize (GtkWidget *widget)
       allocation.width == 1 &&
       allocation.height == 1)
     {
+      gint w, h;
 
       allocation.x = 0;
       allocation.y = 0;
 
       gtk_window_guess_default_size (window, &allocation.width, &allocation.height);
+      gtk_window_get_remembered_size (window, &w, &h);
+      allocation.width = MAX (allocation.width, w);
+      allocation.height = MAX (allocation.height, h);
       if (allocation.width == 0 || allocation.height == 0)
        {
          /* non-empty window */
@@ -7978,6 +7991,7 @@ gtk_window_compute_configure_request_size (GtkWindow   *window,
                                            gint        *height)
 {
   GtkWindowGeometryInfo *info;
+  int w, h;
 
   /* Preconditions:
    *  - we've done a size request
@@ -7986,6 +8000,9 @@ gtk_window_compute_configure_request_size (GtkWindow   *window,
   info = gtk_window_get_geometry_info (window, FALSE);
 
   gtk_window_guess_default_size (window, width, height);
+  gtk_window_get_remembered_size (window, &w, &h);
+  *width = MAX (*width, w);
+  *height = MAX (*height, h);
 
   /* If window is empty so requests 0, default to random nonzero size */
    if (*width == 0 && *height == 0)